/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package videogest;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;


/**
 *
 * @author JAVA
 */
public abstract class Producto {

    private String codigo;
    private String nombre;
    private String sinopsis;
    private boolean alquilado;
    private String genero;
    Clasificacion precioAlquiler;
    private float precioVenta;
    private boolean baja;
    private Date estreno; 

    public Producto(Codigo codigo, String nombre, String sinopsis, String genero, Clasificacion precioAlquiler, float precioVenta) throws FileNotFoundException, IOException {
        this.baja = false;
        this.alquilado = false;
        this.codigo = Fichero.Leer(codigo);
        this.nombre = nombre;
        this.sinopsis = sinopsis;
        this.genero = genero;
        this.precioVenta = precioVenta;
        this.precioAlquiler = precioAlquiler;
        Fichero.incrementarCodigo(this.codigo, codigo);
        this.estreno=new Date();
    }

    public Producto(String codigo, String nombre, String sinopsis, String genero, Clasificacion precioAlquiler, float precioVenta, boolean baja, boolean alquilado,Date estreno) throws FileNotFoundException, IOException {
        this.baja = baja;
        this.alquilado = alquilado;
        this.codigo = codigo;
        this.nombre = nombre;
        this.sinopsis = sinopsis;
        this.genero = genero;
        this.precioVenta = precioVenta;
        this.precioAlquiler = precioAlquiler;
        this.estreno=estreno;

    }

    public boolean isAlquilado() {
        return alquilado;
    }

    public void setAlquilado(boolean alquilado) {
        this.alquilado = alquilado;
    }

    public Date getEstreno() {
        return estreno;
    }

    public void setEstreno(Date estreno) {
        this.estreno = estreno;
    }

    public boolean isBaja() {
        return baja;
    }

    public void setBaja(boolean baja) {
        this.baja = baja;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public Clasificacion getPrecioAlquiler() {
        return precioAlquiler;
    }

    public void setPrecioAlquiler(Clasificacion precioAlquiler) {
        this.precioAlquiler = precioAlquiler;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public float getPrecioVenta() {
        return precioVenta;
    }

    public void setPrecioVenta(float precioVenta) {
        this.precioVenta = precioVenta;
    }

    public String getSinopsis() {
        return sinopsis;
    }

    public void setSinopsis(String sinopsis) {
        this.sinopsis = sinopsis;
    }

    //Dos productor son iguales si tenen el mismo código
    @Override
    public boolean equals(Object o) {
        boolean res = false;
        if (o instanceof Producto) {
            Producto p = (Producto) o;
            if (this.getCodigo() == (p.getCodigo())) {
                res = true;
            }
        }
        return res;
    }

    //  Devuelvo un producto
    public abstract Producto dameProducto(String codigo);

    //métodos abstractos para dar de alta y modificar, obliga que se sobreescriba en todas las subclases
    public abstract void alta();

    public abstract void modificar();
    //
}
